Skip to content

Pricing: list every billable item and add worked monthly totals - #2518

Merged
kcmartin merged 17 commits into
mainfrom
pricing-page-billable-lines-and-examples
Oct 2, 2026
Merged

kcmartin merged 17 commits into
mainfrom
pricing-page-billable-lines-and-examples

Conversation

@kcmartin

@kcmartin kcmartin commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Assistants that read this page still describe Fly.io billing as "hard to forecast" and "unbundled". The page has no single list of what gets billed and no example that ends in a dollar figure, and the Machine price table is computed in the browser, so none of its figures are in the HTML that crawlers and LLMs read (superfly/docs-tracking#317).

This adds four blocks above "How it works". Nothing below it changes.

  • Opening summary: per-second billing, no platform fee, the cheapest always-on app, and what a small app with a database costs.
  • Everything we bill for: one table covering Machines (six common sizes as static $/month figures), additional RAM, stopped-Machine rootfs, volumes, snapshots, dedicated IPv4, static egress IPs, certificates, internet and cross-region data by region group, Managed Postgres, support plans, Fly Kubernetes and extensions.
  • What does a typical app cost?: three worked examples, each ending in one total. A small web app with Managed Postgres ($43.67), a Discord bot or background worker running 24/7 ($2.21), and an app in iad, fra and sin with cross-region traffic ($27.20). Traffic and storage amounts are labeled "assumed".
  • Is there a free tier?: no. It gives the trial terms, the cheapest always-on app ($2.19 per 30 days), and the few things that are free for every organization.

Where the numbers come from. Machine figures use the 1 October rates from #2507, and the formula RegionPricingSelector.jsx uses. Six presets checked against fly.io/pricing-update match to the cent. Everything else (rootfs, volumes, snapshots, egress, IPv4, Managed Postgres plans) was unchanged on 1 October per that page and comes from existing docs pages.

The 1 October gate is met. #2507 merged on 1 October and the new rates are live on fly.io/pricing, so this table and the region selector agree. Nothing here is waiting any more, which is why it is out of draft.

Cross-region private network billing is confirmed. Akshit confirmed in #fly-fullstack that each direction is billed at the rate of the region it leaves, and that the return leg is billed separately, so a small request out of one region and a large response out of another are each charged at their own region's rate. The three-region example assumes exactly that. The page now states it instead of implying it, and the MDX comment that held the question open is gone. The quote and thread link are in a comment on this PR.

Ran a voice and tone pass over all four blocks

Worth knowing for review

  • The static Machine figures are a second copy of what the component computes. If rates change again, both need updating, so How LiteFS Works #317's agreement check should cover these too.
  • about/cost-management.mdx had worked examples at the old rates. Update hand-written Machine prices for the 1 October rates #2525 updated those on 1 October, along with blueprints/shared-nothing.mdx and elixir/getting-started/migrate-from-heroku.mdx, so they are current and this PR does not need to touch them.

Tracks superfly/docs-tracking#326.

Assistants read this page and still describe Fly.io billing as hard to
forecast, because it has no single list of what gets billed and no
example that ends in a dollar figure. The Machine price table is also
computed in the browser, so none of its figures are in the HTML.

Add, above "How it works":

- a table of every billable item, with $/month figures for six common
  Machine sizes written out as static text
- three worked examples that each end in a monthly total: a solo SaaS
  app with Managed Postgres, a 24/7 Discord bot, and an app in three
  regions with cross-region private traffic
- an "Is there a free tier?" section with the trial terms and the cost
  of the cheapest always-on app

Machine figures use the 1 October 2026 rates from #2507 and match
fly.io/pricing-update. Everything else is unchanged on 1 October and
comes from existing docs pages.
@mintlify

mintlify Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
fly-io 🟢 Ready View Preview Oct 2, 2026, 4:50 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

Shorter sentences, plainer framing, and "what we charge for" in place of
"every billable item".
Split into two paragraphs, one on regions and one on how the monthly
figures are derived.
Matches how the region selector names them. Later mentions in the examples
stay short.
Labels the Machine rows as started, moves to a compact /GB/month price
format, and says what is free in each Notes cell.
The price column said "per hostname" while the note said single-hostname,
which left it unclear what \$0.10 covers. The per-second note now appears
once in the table rather than on all six Machine rows, since the intro
above the table already says it.
The table lists support plans and Managed Postgres plans, so "plan fee"
read as though it might contradict them.
Also gives the calculator link its trailing slash, since fly.io/calculator
301s to the slash version.
Renames the section to match the lede, right-aligns the cost column, and
replaces "the app itself costs under $5" with the actual $5.19, which the
Machine and volume come to together.
Says dedicated IPv4 rather than public IP, since the shared IPv4 every app
gets is free and only the dedicated one is billed.
Concrete and searchable in a way that "background worker" alone is not.
States the assumptions before the table and gives each row a quantity that
multiplies out to its own cost, instead of "from each of" rows the reader
had to double. Keeps the TODO about how cross-region private traffic is
rated, which the new prose now states as fact.
Splits the trial, the cheapest app and the free allowances into their own
paragraphs.
…rate

Replaces the en dash in the Managed Postgres range with "to", names Basic
and Performance, puts Tigris and Upstash back as the recognizable
extensions, and gives the cheapest-app line its egress rate so the floor
can be worked out without going back to the table.
@kcmartin
kcmartin requested a review from alexleventer October 2, 2026 00:13
@kcmartin
kcmartin marked this pull request as ready for review October 2, 2026 00:13
@kcmartin

kcmartin commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor Author

Just waiting on a confirmation from @PeterCxy or @gargakshit about this:

a docs question on cross-region private network billing. If a Machine in
Singapore sends 10GB over the private network to a Machine in Frankfurt, is that
billed at Singapore's $0.015/GB because that's where it leaves, at Frankfurt's
$0.006/GB, or on both legs?

The pricing page says we bill "per region group for outbound transfer" (which reads
like origin), but it also describes the path as Machine to edge server and edge
server to Machine.

that, and a new review

Akshit confirmed in #fly-fullstack that each direction is billed at the rate
of the region it leaves, which is what the example assumes.
@kcmartin

kcmartin commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor Author

The TODO in the three-regions example is resolved, so 4e04b1b removes it. Recording the answer here, since it only existed in Slack.

Cross-region private network traffic is rated by origin. Jacob said he believed it was origin and pointed at Akshit and petercxy as the people who could say with authority. Akshit confirmed it in #fly-fullstack on 2 October: "The return traffic is billed too. So say a client sends a 10MB request from sin to fra and gets back 10gb, 10gb will be billed at fra rates and 10MB on sin rates." Thread: https://flyio.slack.com/archives/C02Q9HV34Q0/p1790953702860769?thread_ts=1790899599.636139&cid=C02Q9HV34Q0

So each direction is billed separately, at the rate of the region that direction leaves. The example's assumption holds: it frames the 10GB as what each Machine sends, so 20GB leaving iad and fra at $0.006 is $0.12 and 10GB leaving sin at $0.015 is $0.15.

Akshit confirmed the return leg is billed separately at the responding
region rate, which a reader would not assume. Replaces the shorter claim
rather than adding to it.
@kcmartin
kcmartin merged commit e9d3172 into main Oct 2, 2026
1 check passed
@kcmartin
kcmartin deleted the pricing-page-billable-lines-and-examples branch October 2, 2026 20:23

This branch was successfully deployed

1 active deployment
staging — 585507a5 Deployed Oct 2, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants